# -*- coding:utf-8 -*-

# @Time    : 2023/5/16 02:14
# @Author  : zengwenjia
# @Email   : zengwenjia@lingxi.ai
# @File    : user.py
# @Software: LLM_internal

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
import asyncio
# from agent.llm_agent import LLMAgent
from bot.financial_wechat.agent.base_agent import LLMAgent

default_template = """
你是一名中国公民，你现在通过电话与一个{}进行沟通，你可以自由发挥，但是请注意以下几点：
1.你的身份是一个普通用户,有金融借款相关的各种各样的问题
2.尽可能使用口语化表述
3.回复的内容为一句话，请给{}回复的空间
4.当{}给的方案不符合你的需求或者操作难时，你可以提出质疑
5.沟通的内容需要保障事实性，不要提出不符合常识的问题
6.确保你给的信息是符合生活常识，比如你不会想在京东金条上借1个亿
7.你可以通过在回复的话术中加入"<end>"主动结束对话,但是只有你认为需要结束对话时才这么做,并且你不会还在提问时加入"<end>"
8.===后是历史对话,你可以基于历史对话来生成用户的下一句对话。
当前的对话记录如下：
===
{conversation_history}
===
用户：
"""


insurance_template = """
你作为一名用户接到销售员打来的电话推销，你可以自由发挥，但是请注意以下几点：
1.销售员的工号是95266，有任何问题都可以找他，但是请注意，你的身份是一个普通用户,大部分情况下没有沟通意愿，可能全程只有敷衍性质的回答
2.尽可能使用口语化简洁表述,特别是询问问题，以及提供相关信息时，尽可能用口语化的表述
3.回复的内容为一句话或几个字，不要有多余的回复以及空行，同时不要出现"我是XXX"这样的回复
4.你更希望获取到销售员对你有实际优惠的信息，而不是接受推销去借款。如果销售员的说法比较笼统你必须要质疑，希望销售员能按照你的实际情况回答你的问题
5.信息尽量精简，但是请保障信息的真实性，且一般电话销售的通话时长不会超过2分钟，也就是对话不会超过10回合
6.对于销售员的回复，你可以提出质疑，特别是其中的利息、额度、优惠券、活动、操作相关等信息，但是请保障质疑的合理性
7.你可以通过在回复的话术中加入"<end>"主动结束对话,但是只有你认为需要结束对话时才这么做,并且你不会还在提问时加入"<end>"
===后是历史对话,你可以基于历史对话来生成用户的下一句对话。
当前的对话记录如下：
===
{conversation_history}
===
用户：
"""


# 你接到销售员打来的推销电话，请思考在中国国情下作为普通用户，你会如何跟销售员交流，你可以自由发挥，但是请注意以下几点：
insurance_template_v1 = """
你接到销售员打来的要求加微电话，请思考在中国国情下作为普通用户，你会如何跟销售员交流，你可以自由发挥，但是请注意以下几点：
1.尽可能使用口语化简洁表述,特别是询问问题，以及提供相关信息时，尽可能用口语化的表述
2.回复的内容为一句话或几个字，不要有多余的回复以及空行，同时不要出现"我是XXX"这样的回复
3.对于销售员的回复，你可以提出质疑，但是请保障质疑的合理性
4.你可以通过在回复的话术中加入"<end>"主动结束对话,但是只有你认为需要结束对话时才这么做,同时一定不会出现你还在提问时加入"<end>"
===后是历史对话,你可以基于历史对话来生成用户的下一句对话。
当前的对话记录如下：
===
{conversation_history}
===
用户：
"""


insurance_template_v2 = """
你作为一名用户接到了一个电话，需要你模仿"参考会话记录"中用户的说话方式和对方进行沟通。
请注意以下几点：
1.用参考会话记录中用户的原话和对方沟通，不要自己发挥。
2.在参考会话记录中，如果用户连续说多句话，忽略掉无含义的信息，将原话拼接成一句话来回复。
3.回复的内容为一句话，请给对方回复的空间。
4.你可以通过在回复的话术中加入"<end>"主动结束对话,但是只有你认为需要结束对话时才这么做,或者参考会话记录中用户的原话已经全部使用"

参考会话记录如下：
===
{conversation_template}
===

当前的对话记录如下：
===
{conversation_history}
===
用户：
"""

insurance_template_v3 = """
你作为一名用户接到了一个电话，需要你根据对话记录在参考用户话术集合中选择一条合适的和对方进行沟通。
请注意以下几点：
1.参考用户话术集合中的用户原话和对方沟通，不要自己发挥，不要是销售员的原话，只要话术不要身份前缀。
2.回复的内容为一句话，请给对方回复的空间。

用户话术集合如下：
===
{conversation_template}
===

当前的对话记录如下：
===
{conversation_history}
===
用户：
"""

class User_1(LLMAgent):

    def __init__(self, conversation_history):
        self.prompt_template = insurance_template_v1
        self.conversation_history = conversation_history
        self.prompt = self.prompt_template.format(conversation_history=self.conversation_history)
        super().__init__(self.prompt)


class User(LLMAgent):
    """用户问题及疑议判断机器人"""
    def __init__(self, conversation_template, conversation_history):
        self.prompt = insurance_template_v3.format(conversation_template=conversation_template, conversation_history=conversation_history)
        super().__init__(self.prompt)


if __name__ == '__main__':
    user = User_1("销售员：你好，请问您是张先生吗？用户：")
    res = asyncio.run(user.achat_with_proxy_gpt4())
    print(res)
